﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
 定义一个泛型委托 FilterDelegate<T>，用于筛选集合中的元素。
 创建一个泛型方法 Filter，它接受一个集合和一个 FilterDelegate<T> 委托，并返回符合条件的元素集合。
 练习要求：
     创建一个 List<int>，并使用 Filter 方法筛选出所有大于 10 的数字。
     创建一个 List<string>，并使用 Filter 方法筛选出所有长度大于 5 的字符串。
 */
namespace CS_BEGINNER_TO_PROFICIENT.STD.GenericitySTD
{
    public delegate bool FilterDelegate<T>(T item);

    public static class GenericUtils
    {
        public static List<T> Filter<T>(List<T> items, FilterDelegate<T> filter)
        {
            List<T> result = new List<T>();
            foreach (var item in items)
            {
                if (filter(item))
                {
                    result.Add(item);
                }
            }
            return result;
        }
    }
}
